package persistencia;

import java.util.Date;
import java.util.List;
import modelo.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pojos.Intervenciones;
import pojos.Procesoasistencial;

/**
 *
 * @author Carlos
 */
public class IntervencionesDAO {

    private Session sesion;
    private Transaction transaccion;

    private void conexion() {
        sesion = HibernateUtil.getSessionFactory().openSession();//ABRIMOS UNA SESION
        transaccion = sesion.beginTransaction();//ARRANCA LA TRANSACCION
    }

    /**
     * ESTE METODO DEVUELVE UNA LISTA CON TODAS LAS INTERVENCIONES DE LA BASE DE
     * DATOS
     *
     * @return listaIntervenciones
     */
    public List<Intervenciones> getIntervenciones()//METODO PROBADO, FUNCIONA CORRECTAMENTE
    {
        List<Intervenciones> listaIntervenciones;
        conexion();
        listaIntervenciones = sesion.createQuery("FROM Intervenciones").list();
        sesion.close();
        return listaIntervenciones;
    }

    /**
     * INSERTA EN LA BASE DE DATOS UNA INTERVENCION
     *
     * @param intervencion LINEA QUE QUEREMOS INSERTAR,INSTANCIADA PREVIAMENTE
     */
    public void addIntervencion(Intervenciones intervencion) {
        conexion();
        sesion.save(intervencion);
        transaccion.commit();
        sesion.close();
    }

    public void updateIntervencion(Intervenciones intervencion) {
        conexion();
        sesion.update(intervencion);
        transaccion.commit();
        sesion.close();
    }

    public void deleteIntervencion(Intervenciones intervencion) {
        conexion();
        sesion.delete(intervencion);
        transaccion.commit();
        sesion.close();
    }

    /**
     * ESTE METODO DEVUELVE UN ID_INTERVENCION A TRAVES DE UN CODIGO
     *
     * @param idIntervencion CODIGO DEL PEDIDO QUE QUEREMOS BUSCAR
     * @return intervencionEncontrada SOLICITADO
     */
    public List<Intervenciones> getIDIntervencion(Integer idIntervencion) {
        List<Intervenciones> intervencionEncontrada;
        conexion();
        intervencionEncontrada = sesion.createQuery("FROM Intervenciones WHERE idIntervencion = " + idIntervencion).list();
        sesion.close();
        return intervencionEncontrada;
    }

    public List<Intervenciones> getFechaIntervencion(Date fechaIntervencion) {
        List<Intervenciones> fechaEncontrada;
        conexion();
        fechaEncontrada = sesion.createQuery("FROM Intervenciones WHERE fechaIntervencion = '" + fechaIntervencion + "'").list();
        sesion.close();
        return fechaEncontrada;
    }

    public List<Intervenciones> getQuirofano(Integer numQuirofano) {
        List<Intervenciones> quirofanoEncontrado;
        conexion();
        quirofanoEncontrado = sesion.createQuery("FROM Intervenciones WHERE numQuirofano = " + numQuirofano).list();
        sesion.close();
        return quirofanoEncontrado;
    }

    public List<Intervenciones> getEspecialidad(String especialidad) {
        List<Intervenciones> especialidadEncontrada;
        conexion();
        especialidadEncontrada = sesion.createQuery("FROM Intervenciones WHERE especialidad = '" + especialidad + "'").list();
        sesion.close();
        return especialidadEncontrada;
    }

    /**
     * Devuelve una Intervención según un Proceso Asistencial pasado como
     * parámetro
     *
     * @param pa Proceso Asistencial del que querems saber su Intervencion
     * asociada
     * @return La intervencion asociada si existe. NULL, si no existe.
     * @author cvenegas
     */
    static Session sesion2;

    public static Intervenciones getIntervencion(Procesoasistencial pa) {
        Intervenciones intervencion;
        sesion2 = HibernateUtil.getSessionFactory().openSession();//ABRIMOS UNA SESION
        sesion2.beginTransaction();//ARRANCA LA TRANSACCION
        intervencion = (Intervenciones) sesion2.createQuery("FROM Intervenciones WHERE procesoasistencial.idPa = '" + pa.getIdPa() + "'").uniqueResult();
        return intervencion;
    }
}
